package com.neusoft.zqygbc.neusoft_wenda.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.Toast;
import android.widget.FrameLayout.LayoutParams;

import com.neusoft.zqygbc.neusoft_wenda.R;
import com.neusoft.zqygbc.neusoft_wenda.base.RetrofitCallback;
import com.neusoft.zqygbc.neusoft_wenda.javeBean.Status;
import com.neusoft.zqygbc.neusoft_wenda.model.UserModel;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import retrofit2.Call;


public class VerifyActivity extends Activity implements OnClickListener {


    private LinearLayout verify_return;
    private Button next;//声明butto下一步
    private Button code;//声明button获取验证码
    private EditText phone;//声明EditText  手机号码输入框
    private EditText finalcode;//声明EditText  验证码输入框
    int i = 30;  // 声明 int i= 30 后面用于验证码倒计时
    private EventHandler eventHandler = new MyHandler();
    private UserModel userModel;
    private Call call;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_verify);//设置界面xml
        SMSSDK.initSDK(this, "217a7db48873c", "a9984b56bda5493862f6ba7f944b08b9");//sms短信验证码sdk
        SMSSDK.registerEventHandler(eventHandler);//方法回调
        findView();//调用findview  方法绑定控件


    }


    private void findView() {

        verify_return = (LinearLayout) findViewById(R.id.verify_return);
        next = (Button) findViewById(R.id.btn_next);
        code = (Button) findViewById(R.id.code_next);
        phone = (EditText) findViewById(R.id.et_phoneNumber);
        finalcode = (EditText) findViewById(R.id.et_codeNumber);
        verify_return.setOnClickListener(this);
        next.setOnClickListener(this);//给下一步按钮设置监听
        code.setOnClickListener(this);//给获取验证码按钮设置监听
    }


    //方法回调详细解释请查看官网：http://wiki.mob.com/android-%E7%9F%AD%E4%BF%A1sdk%E6%93%8D%E4%BD%9C%E5%9B%9E%E8%B0%83/
    private class MyHandler extends EventHandler {
        @Override
        public void onRegister() {

            super.onRegister();
        }

        @Override
        public void beforeEvent(int event, Object data) {
            super.beforeEvent(event, data);
        }

        @Override
        public void afterEvent(int event, int result, Object data) {

            Message msg = new Message();
            msg.arg1 = event;
            msg.arg2 = result;
            msg.obj = data;
            handler.sendMessage(msg);

            super.afterEvent(event, result, data);
        }

        @Override
        public void onUnregister() {
            super.onUnregister();
        }
    }

    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.what == -9) {
                code.setText("重新发送(" + i + ")");
            } else if (msg.what == -8) {
                code.setText("获取验证码");
                code.setClickable(true);
                i = 30;
            } else {
                int event = msg.arg1;
                int result = msg.arg2;
                Object data = msg.obj;
                Log.e("event", "event=" + event);
                if (result == SMSSDK.RESULT_COMPLETE) {
                    // 短信注册成功后，返回下一个界面,然后提示
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {// 提交验证码成功
                        Toast.makeText(getApplicationContext(), "验证成功",
                                Toast.LENGTH_SHORT).show();//消息提示
                        Intent intent = new Intent(VerifyActivity.this,
                                RegisterActivity.class);//跳转activity
                        intent.putExtra("utel", phone.getText().toString());//将phone值放进phone里以便传送至RegisterToserver中
                        startActivity(intent);
                        finish();//设置无法返回本界面
                    } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        Toast.makeText(getApplicationContext(), "验证码已经发送",
                                Toast.LENGTH_SHORT).show();
                    } else {
                        ((Throwable) data).printStackTrace();
                    }
                }
            }
        }
    };


    public void onClick(View v) {
        String phoneNums = phone.getText().toString();
        switch (v.getId()) {
            case R.id.verify_return:
                finish();
                break;
            case R.id.code_next:
                // 1. 通过规则判断手机号
                if (!judgePhoneNums(phoneNums)) {
                    return;
                }
                // 2.判断手机号是否注册
                checkTel(phoneNums);
                break;

            case R.id.btn_next:
                SMSSDK.submitVerificationCode("86", phoneNums, finalcode
                        .getText().toString());
                createProgressBar();
                break;
        }
    }


    /**
     * 判断手机号码是否合理
     *
     * @param phoneNums
     */
    private boolean judgePhoneNums(String phoneNums) {
        if (isMatchLength(phoneNums, 11)
                && isMobileNO(phoneNums)) {
            return true;
        }
        Toast.makeText(this, "手机号码输入有误！", Toast.LENGTH_SHORT).show();
        return false;
    }

    /**
     * 判断一个字符串的位数
     *
     * @param str
     * @param length
     * @return
     */
    public static boolean isMatchLength(String str, int length) {
        if (str.isEmpty()) {
            return false;
        } else {
            return str.length() == length ? true : false;
        }
    }

    /**
     * 验证手机格式
     */
    public static boolean isMobileNO(String mobileNums) {
        /*
		 * 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
		 * 联通：130、131、132、152、155、156、185、186 电信：133、153、180、189、（1349卫通）
		 * 总结起来就是第一位必定为1，第二位必定为3或5或8，其他位置的可以为0-9
		 */
        String telRegex = "[1][358]\\d{9}";// "[1]"代表第1位为数字1，"[358]"代表第二位可以为3、5、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
        if (TextUtils.isEmpty(mobileNums))
            return false;
        else
            return mobileNums.matches(telRegex);
    }

    /**
     * 判断手机号是否被注册
     */
    private void checkTel(final String phoneNums){
        userModel = new UserModel();
        call = userModel.checktel(phoneNums);
        RetrofitCallback<Status> callback = new RetrofitCallback<Status>() {
            @Override
            public void onResponse(Status status) {
                if(status.getCode().equals("1")){
                    Toast.makeText(VerifyActivity.this, "该手机号已注册", Toast.LENGTH_SHORT).show();
                }else {
                    // 3. 通过sdk发送短信验证
                    SMSSDK.getVerificationCode("86", phoneNums);

                    // 4. 把按钮变成不可点击，并且显示倒计时（正在获取）
                    code.setClickable(false);
                    code.setText("重新发送(" + i + ")");
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            for (; i > 0; i--) {
                                handler.sendEmptyMessage(-9);
                                if (i <= 0) {
                                    break;
                                }
                                try {
                                    Thread.sleep(1000);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                            handler.sendEmptyMessage(-8);
                        }
                    }).start();
                }
            }
        };
        userModel.bindCallback(call, callback);
    }


    /**
     * progressbar
     */
    private void createProgressBar() {
        FrameLayout layout = (FrameLayout) findViewById(android.R.id.content);
        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        layoutParams.gravity = Gravity.CENTER;
        ProgressBar mProBar = new ProgressBar(this);
        mProBar.setLayoutParams(layoutParams);
        mProBar.setVisibility(View.VISIBLE);
        layout.addView(mProBar);
    }

    @Override


    protected void onDestroy() {
        SMSSDK.unregisterAllEventHandler();
        super.onDestroy();
    }

}
